home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / simula / books / books.lha / kirkerud / promptools.sim < prev    next >
Text File  |  1993-08-16  |  6KB  |  173 lines

  1. class promptools;
  2. begin
  3.  
  4. % ************************************************************
  5. % *                                                          *
  6. % *  Denne klassen inneholder verkt|y (prosedyrer) som       *
  7. % *  kan brukes til } lese inn enkle verdier (tall, tegn,    *
  8. % *  sannhetsverdier) som brukeren blir bedt om } skrive.    *
  9. % *                                                          *
  10. % *  F|lgende prosedyrer er deklarert:                       *
  11. % *                                                          *
  12. % *   integer procedure be_om_int(prompt); text prompt;      *
  13. % *      <Skriver prompt'et, leser inn heltall               *
  14. % *       tastet av brukeren. Innlesingen er robust:         *
  15. % *       Dersom brukeren taster noe som ikke er heltall,    *
  16. % *       skrives en feilmelding, og brukeren gis en ny      *
  17. % *       sjanse>;                                           *
  18. % *   real procedure be_om_real(prompt); text prompt;        *
  19. % *      <Skriver prompt'et, leser inn reelt tall            *
  20. % *       tastet av brukeren. Robust.>;                      *
  21. % *   character procedure be_om_char(prompt); text prompt;   *
  22. % *      <Skriver prompt'et, leser inn et tegn               *
  23. % *       tastet av brukeren.>;                              *
  24. % *   Boolean procedure be_om_bool(prompt); text prompt;     *
  25. % *      <Skriver prompt'et, leser inn et tegn               *
  26. % *       tastet av brukeren. Funksjon-verdien er            *
  27. % *       false dersom brukeren taster 'n' eller 'N',        *
  28. % *       true ellers>;                                      *
  29. % *   text procedure be_om_text(prompt); text prompt;        *
  30. % *      <Skriver prompt'et, leser inn en linje tastet       *
  31. % *       av brukeren. Funksjonsverdien er resultatet        *
  32. % *       av } 'strippe' denne linjen>;                      *
  33. % *                                                          *
  34. % *  Desuten fins de samme prosedyrene med engelske navn     *
  35. % *  og feilutskrifter:                                      *
  36. % *                                                          *
  37. % *   integer procedure ask_for_int(prompt); text prompt;    *
  38. % *   real procedure ask_for_real(prompt); text prompt;      *
  39. % *   character procedure ask_for_char(prompt); text prompt; *
  40. % *   Boolean procedure ask_for_bool(prompt); text prompt;   *
  41. % *   text procedure ask_for_text(prompt); text prompt;      *
  42. % *                                                          *
  43. % *  Laget til bruk i undervisningen i IN105                 *
  44. % *  Programmerer: Bj|rn Kirkerud                            *
  45. % *                                                          *
  46. % ************************************************************
  47.  
  48.  
  49. % Prosedyrer for } lese heltall:
  50.  
  51.   integer procedure be_om_int(prompt); text prompt;
  52.     begin character c; integer tegn;
  53.       ask(prompt);
  54.       c := inchar; while c = ' ' do c := inchar;
  55.       tegn := if c = '-' then -1 else +1;
  56.       if c = '-' or c = '+' then c := inchar;
  57.       if not digit(c) 
  58.         then begin 
  59.             message("Ulovlig tegn i heltall: '", c, "'. Pr|v p} nytt!");
  60.             be_om_int := be_om_int(prompt);
  61.           end
  62.         else begin
  63.             sysin.setpos(sysin.pos - 1); 
  64.             be_om_int := tegn*inint;
  65.           end;
  66.     end;
  67.   
  68.   integer procedure ask_for_int(prompt); text prompt;
  69.     begin character c; integer tegn;
  70.       ask(prompt);
  71.       c := inchar; while c = ' ' do c := inchar;
  72.       tegn := if c = '-' then -1 else +1;
  73.       if c = '-' or c = '+' then c := inchar;
  74.       if not digit(c) 
  75.         then begin 
  76.             message("Illegal character in integer: '", c, "'. Try once more!");
  77.             ask_for_int := ask_for_int(prompt);
  78.           end
  79.         else begin
  80.             sysin.setpos(sysin.pos - 1); 
  81.             ask_for_int := tegn*inint;
  82.           end;
  83.     end;
  84.  
  85. % Prosedyrer for } lese reelle tall:
  86.  
  87.   real procedure be_om_real(prompt); text prompt;
  88.     begin character c; integer tegn;
  89.       ask(prompt);
  90.       c := inchar; while c = ' ' do c := inchar;
  91.       tegn := if c = '-' then -1 else +1;
  92.       if c = '-' or c = '+' then c := inchar;
  93.       if not (digit(c) or c = '.')
  94.         then begin 
  95.             message("Ulovlig tegn i tall: '", c, "'. Pr|v p} nytt!");
  96.             be_om_real := be_om_real(prompt);
  97.           end
  98.         else begin
  99.             sysin.setpos(sysin.pos - 1); 
  100.             be_om_real := tegn*inreal;
  101.           end;
  102.     end;
  103.  
  104.   real procedure ask_for_real(prompt); text prompt;
  105.     begin character c; integer tegn;
  106.       ask(prompt);
  107.       c := inchar; while c = ' ' do c := inchar;
  108.       tegn := if c = '-' then -1 else +1;
  109.       if c = '-' or c = '+' then c := inchar;
  110.       if not (digit(c) or c = '.') 
  111.         then begin 
  112.             message("Illegal character in number: '", c, "'. Try once more!");
  113.             ask_for_real := ask_for_real(prompt);
  114.           end
  115.         else begin
  116.             sysin.setpos(sysin.pos - 1); 
  117.             ask_for_real := tegn*inreal;
  118.           end;
  119.     end;
  120.   
  121. % Prosedyrer for } lese enkelt-tegn:
  122.  
  123.   character procedure be_om_char(prompt); text prompt;
  124.     begin character c;
  125.       ask(prompt);
  126.       c := inchar; while c = ' ' and sysin.more do c := inchar;
  127.       be_om_char := c;
  128.     end;
  129.  
  130.   character procedure ask_for_char(prompt); text prompt;
  131.     ask_for_char := be_om_char(prompt);
  132.  
  133.  
  134.  
  135. % Prosedyrer for } lese sannhetsverdier:
  136.  
  137.   Boolean procedure be_om_bool(prompt); text prompt;
  138.     begin character c;
  139.       ask(prompt);
  140.       c := inchar; while c = ' ' and sysin.more do c := inchar;
  141.       be_om_bool := not(c = 'n' or c = 'N');
  142.     end;
  143.   
  144.   Boolean procedure ask_for_bool(prompt); text prompt;
  145.      ask_for_bool := be_om_bool(prompt); 
  146.   
  147.  
  148. % Prosedyrer for } lese tekst:
  149.  
  150.   text procedure be_om_text(prompt); text prompt;
  151.     begin
  152.       ask(prompt);
  153.       be_om_text :- intext(80).strip;
  154.     end;
  155.   
  156.   text procedure ask_for_text(prompt); text prompt;
  157.     ask_for_text :- be_om_text(prompt);
  158.  
  159.  
  160. % To hjelpeprosedyrer:
  161.  
  162.   procedure ask(prompt); text prompt;
  163.     begin
  164.       outtext(prompt); breakoutimage; inimage;
  165.     end;
  166.  
  167.   procedure message(t1, c, t2); text t1, t2; character c;
  168.     begin outtext(t1); outchar(c); outtext(t2); outimage end;
  169.  
  170. end promptools;
  171.  
  172.  
  173.